package fr.bitstrip.sitn.validator;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import fr.bitstrip.sitn.dao.UtilisateurDAO;
import fr.bitstrip.sitn.model.Utilisateur;

/**
 * Validation du formulaire d'inscription d'un nouvel utilisateur
 *
 */

@Component("utilisateurValidator")
@Scope("prototype")
public class UtilisateurValidator implements Validator {
	@Autowired
	private UtilisateurDAO utilisateurDAO;
	
	private static final String EMAIL_PATTERN = 
			"^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
			+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
	
	public boolean supports(Class<?> aClass) {
		return aClass.equals(Utilisateur.class);
	}
	
	public void validate(Object o, Errors errors ) {

		Utilisateur utilisateur = (Utilisateur) o;
		if (utilisateur == null) {
			errors.rejectValue("utilisateur", "Erreur !", null, "Utilisateur necessaire !");
		}
		else {		
			if (utilisateur.getPrenom() == null || utilisateur.getPrenom().equals("")) {
				errors.rejectValue("prenom", "Valeur manquante", null, "Il faut saisir un prenom");
			}
			if (utilisateur.getNom() == null || utilisateur.getNom().equals("")) {
				errors.rejectValue("nom", "Valeur manquante", null, "Il faut saisir un nom");
			}			
			if (utilisateur.getEmail() == null || utilisateur.getEmail().equals("")) {
				errors.rejectValue("email", "Valeur manquante", null, "Il faut saisir une adresse e-mail");
			}
			else{
				Pattern pattern = Pattern.compile(EMAIL_PATTERN);
				Matcher matcher = pattern.matcher(utilisateur.getEmail());
				if (!matcher.matches())
					errors.rejectValue("email", "Format incorrect",null,"L'adresse e-mail n'est pas au bon format");
				else{
					if (utilisateurDAO.getUserByEmail(utilisateur.getEmail()) != null && (utilisateur.getId().equals("0")) )
						errors.rejectValue("email", "Adresse utilisée",null,"L'adresse e-mail est déjà utilisée");
				}
			}
			
			if (utilisateur.getLogin() == null || utilisateur.getLogin().equals("")) {
				errors.rejectValue("login", "Valeur manquante", null, "Il faut saisir un login");
			}
			if (utilisateur.getPassword() == null || utilisateur.getPassword().equals("")) {
				errors.rejectValue("password", "Valeur manquante", null, "Il faut saisir un mot de passe");
			}
		}
	}
	
}
